
#pragma once

#ifndef __MSCTRL_HIL_NONE_SUBSYSTEM_HH__
#define __MSCTRL_HIL_NONE_SUBSYSTEM_HH__

#include "hil/hil.hh"
#include "sim/abstract_subsystem.hh"

namespace MsCtrl::HIL::None {

class Controller;

class Subsystem : public AbstractSubsystem {
 protected:
  HIL *pHIL;
  Controller *pController;

 public:
  Subsystem(ObjectData &);
  virtual ~Subsystem();

  HIL *getHIL() const;

  void init() override;

  ControllerID createController(Interface *) noexcept override;
  AbstractController *getController(ControllerID) noexcept override;

  void getStatList(std::vector<Stat> &, std::string) noexcept override;
  void getStatValues(std::vector<double> &) noexcept override;
  void resetStatValues() noexcept override;

  void createCheckpoint(std::ostream &) const noexcept override;
  void restoreCheckpoint(std::istream &) noexcept override;

  Request *restoreRequest(uint64_t) noexcept override;
};

}  // namespace MsCtrl::HIL::None

#endif
